﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Runtime.Remoting.Messaging;
using System.Configuration;

namespace AuriaCompte.Lib
{
    public class Tools
    {
        public static string cConnSql = "ConnSql";
        public static string cDbFile = "DbFile";

        /// <summary>
        /// Renvoi un String représentant la valeur de la clef passée en paramétre.
        /// Si cette clef n'existe pas, renvoie String.Empty
        /// </summary>
        /// <param name="key">La clef du fichier de configuration</param>
        /// <returns>La valeur représentée dans le fichier de configuration de la clef</returns>
        public static string GetValueFileConfiguration(string key)
        {
            string retour = string.Empty;
            if (ConfigurationManager.AppSettings.AllKeys.Contains(key))
            {
                retour = ConfigurationManager.AppSettings[key].ToString();
            }
            return retour;
        }

        /// <summary>
        /// Permet de spécifier le nom du fichier de base de données
        /// </summary>
        /// <param name="DbName">Le nom du fichier</param>
        public static void SetDbFileName(String DbName)
        {
            CallContext.SetData(Tools.cDbFile, DbName);
        }

        /// <summary>
        /// Obtenir la connexion courante
        /// </summary>
        /// <returns>SQLiteConnection</returns>
        public static SQLiteConnection GetConnexion()
        {
            // Récupération de la connexion à la base de données
            // Si elle elle est perdue, nous l'ouvrons
            if (((SQLiteConnection)CallContext.GetData(Tools.cConnSql)) == null)
                CallContext.SetData(Tools.cConnSql, new SQLiteConnection("Data Source=" + Convert.ToString(CallContext.GetData(Tools.cDbFile)) + ";Version=3;"));

            // Récupération de la connexion à la base de données
            // Si elle n'est pas ouverte, nous l'ouvrons
            if (((SQLiteConnection)CallContext.GetData(Tools.cConnSql)).State != System.Data.ConnectionState.Open)
                ((SQLiteConnection)CallContext.GetData(Tools.cConnSql)).Open();

            return ((SQLiteConnection)CallContext.GetData(Tools.cConnSql));
        }

        /// <summary>
        /// Calcul la Clef RIB selon les parametres
        /// </summary>
        /// <param name="codeBanque">Le code banque</param>
        /// <param name="codeGuichet">Le code guichet</param>
        /// <param name="numCompte">Le numero de compte</param>
        /// <returns>La clef RIB</returns>
        public static string DonneCleRIB(string codeBanque, string codeGuichet, string numCompte)
        {
            numCompte = numCompte.Replace("A", "1").Replace("J", "1")
                                 .Replace("B", "2").Replace("K", "2").Replace("S", "2")
                                 .Replace("C", "3").Replace("L", "3").Replace("T", "3")
                                 .Replace("D", "4").Replace("M", "4").Replace("U", "4")
                                 .Replace("E", "5").Replace("N", "5").Replace("V", "5")
                                 .Replace("F", "6").Replace("O", "6").Replace("W", "6")
                                 .Replace("G", "7").Replace("P", "7").Replace("X", "7")
                                 .Replace("H", "8").Replace("Q", "8").Replace("Y", "8")
                                 .Replace("I", "9").Replace("R", "9").Replace("Z", "9");
            int b = int.Parse(codeBanque);
            int g = int.Parse(codeGuichet);
            int c = int.Parse(numCompte);

            int k = 97 - ((89 * b + 15 * g + 3 * c) % 97);

            return k.ToString("00");
        }

    }
}
